perm filename INIT.IRC[1,LCS] blob sn#305751 filedate 1977-09-19 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00006 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	COMMENT: ******INITIALIZATION FILE FOR MUSIC.DMP********  3/77
C00005 00003	EXTERNAL FUNCTION
C00007 00004	FUNCTION SYNTH(ARRAY FUNC)
C00009 00005	<comment: type 'SETMAG nchns, srate'  
C00012 00006	<FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)
C00015 ENDMK
C⊗;
COMMENT: ******INITIALIZATION FILE FOR MUSIC.DMP********  3/77
***THIS IS EXPORT VERSION. CONTAINS NO MENTION OF DATADISC. (DDCLR,NOTDD)
**** ALL DISPLAY CODE WILL REQUIRE CHANGES, HENCE IS COMMENTED OUT.

	 TO CREATE MUSIC.SAV RUN COMMAND FILE, 'MUS.CMD',
	 THEN READ IN THIS FILE BEFORE SAVING ON THE SYSTEM.

	THE FOLLOWING FUNCTIONS ARE SET UP HEREIN:
		SEG(ARRAY FUNC)
		SYNTH(ARRAY FUNC)
		POWER( N, X )   [GIVES POWER OF N TO THE XTH] ;

VARIABLE MAG,C,CF,CS,D,DF,DS,E,EF,ES,F,FF,FS,G,GF,GS,A,AF,AS,B,BF,BS;
C←261.62;  CS←DF←277.18;  D←293.66;  DS←EF←311.13;  E←FF←329.63;
F←ES←349.23;  FS←GF←369.99;  G←391.99;  GS←AF←415.31;
A←440;    AS←BF←466.16;  B←493.89; CF←B/2; BS←C*2;

COMMENT:******DPYSET(INTEGER POG,ARRAY DPYBUF,INTEGER SIZE),
|	ALINE(INTEGER X1,INTEGER Y1,INTEGER X2,INTEGER Y2),
|	DPYOUT(INTEGER POG),
|	AIVECT(INTEGER X,INTEGER Y),
|	TYPLOC(INTEGER X,INTEGER Y),  RVECT(INTEGER X,INTEGER Y)**
|
|FUNCTION SEE(ARRAY FUNC)**
|    BEGIN  
|	ARRAY DPY(225)**  VARIABLE IY,I,IY2**
|	DPYSET(2,DPY,225)** 
|COMMENT  THIS VERSION MUST BE LOADED WITH %LEXPLIB**
|	ALINE(-264,200,256,200)**  ALINE(-266,328,-246,328)**
|	ALINE(-266,456,-246,456)** ALINE(-266,72,-246,72)**
|	ALINE(-266,-56,-246,-56)** ALINE(-256,-56,-256,456)**
|	ALINE(0,190,0,210)**       ALINE(-128,190,-128,210)**
|	ALINE(128,190,128,210)**
|	IY←INT(FUNC(0)*256.0+200.0)**   AIVECT(-256,IY)**
|
|COMMENT:  DISPLAY ONLY EVERY THIRD SEGMENT **
|	FOR I←1 STEP 3 UNTIL 511 DO
|	  BEGIN
|		IY2←INT(FUNC(I)*256.0+200.0)**
|		RVECT(3,IY2-IY)**    IY←IY2**
|	  END**    DPYOUT(2)**
|      END**
|
|FUNCTION SEEIT(ARRAY FUNC)**  BEGIN
|	VARIABLE K**	PRINT "SEG ARRAY   "** 
|	SEE(FUNC)**
|*****	END;

EXTERNAL FUNCTION
	RDNUM(X), SIND(X),
	SIN(A),  EXP(A),  ALOG(A),  SQRT(A);
FUNCTION SEG(ARRAY FUNC);
BEGIN
VARIABLE X512,K,A1,A2,ST,STPP,STPS,IS,IT,DIF,RK;
  A1←0; ST←0; STPP←0; X512←0;
  PRINT " SEG ARRAY  ";
	WHILE STPP ≤ 1 DO
		BEGIN
		 RDNUM(A2);  
		 IF A2 =512 THEN X512←A2;
		 IF A2 =512 THEN RDNUM(A2);  RDNUM(STPP);
COMMENT: TYPE 512 AT FIRST TO USE 512 STEPS INSTEAD OF 100 STEPS.;
		 IF STPP ≤ 1 THEN A1←A2;
		END;

    WHILE STPP < 999 DO   
      BEGIN  
	IS← INT(STPP*5.120+.0001);
	IF X512 > 0 THEN IS←INT(STPP+.0001);
	IF IS > 512 THEN 
 	    BEGIN  
		FOR K←0 STEP 1 UNTIL 511 DO
COMMENT: READ 512 NUMS FROM A FUNC FILE.;
  		  BEGIN
		     RDNUM(RK);  FUNC(K)← RK;
		  END;
COMMENT:***	SEEIT(FUNC); 
		RETURN;
	    END;

	STPP ← IS-1; 		STPS ← STPP-ST;
	IS ← INT(STPS);		DIF←A2-A1;
	IT←INT(ST);		ST ← STPP;
	FOR K←0 STEP 1 UNTIL IS DO
		BEGIN
		RK ← K;
		FUNC(K+IT)  ← A1+DIF*RK/STPS; 
		END;
COMMENT:***IF STPP = 511 THEN SEEIT(FUNC);
	IF STPP ≥ 511 THEN RETURN;
	A1←A2;  ST←STPP;
	RDNUM(A2); RDNUM(STPP);
       END;
END;
FUNCTION SYNTH(ARRAY FUNC);
BEGIN
VARIABLE K,XX,H,FAC,CON,AMP,X,XK,J;
FOR J ← 0 STEP 1 UNTIL 511 DO  BEGIN
	FUNC(J) ← 0; END;
COMMENT: CLEAR THE ARRAY;
 
RDNUM(XX); 	IF XX = 99 THEN XX ← -XX;
H ← XX; 	IF XX < 0 THEN RDNUM(H);
WHILE H < 999 DO
   BEGIN
	RDNUM(AMP); 
	X ←0; CON ←0;
	IF XX < 0 THEN 
	   BEGIN
		RDNUM(X);  RDNUM(CON);
COMMENT		X ← X * 1.42222222 +1 ; COMMENT 1.422 = 512/360 ;
		X ← X * 512/360 +1;
	   END;

	FOR J ← 0 STEP 1 UNTIL 511  DO
	   BEGIN
		XK ← SIND(X*360/512) * AMP + CON;
   COMMENT: .703125 = 360/512 ;	XK ← SIND(X*.703125) * AMP + CON ;
		IF CON ≥ 100 THEN FUNC(J) ← (XK-100)*FUNC(J) ;
		IF CON < 100 THEN FUNC(J) ← FUNC(J) + XK ;
		X ← X+H;	IF X > 512 THEN X ← X-512;
	   END;
	RDNUM(H);
    END;

X ← FUNC(0);   COMMENT: NEXT FOR NORMALIZATION;
FOR J ← 1 STEP 1 UNTIL 511  DO BEGIN H ← ABS(FUNC(J)); 
	IF X < H THEN X ← H;  END;

FOR J ← 0 STEP 1 UNTIL 511  DO  BEGIN  FUNC(J) ← FUNC(J) / X ;  END;
PRINT " SYNTH ARRAY  ";	 COMMENT:********SEE(FUNC);
END;



FUNCTION POWER(X,N)=EXP(N*ALOG(X));	comment nth power of x;

<comment: type 'SETMAG; nchns, srate'  ;
FUNCTION MAGERR(X);
	BEGIN  PRINT "IMPROPER INPUT.   ";  X←0;
	  print "Type number of channels and sample rate: ";
	  END;

FUNCTION ADJRATE; BEGIN
  IF SRATE < 6400 THEN BEGIN
    IF SRATE <8 THEN SRATE ← 6400;  IF SRATE <10 THEN SRATE ← 8000;
    IF SRATE <12 THEN SRATE ← 10000;  IF SRATE <16 THEN SRATE ← 12800;  
    IF SRATE <20 THEN SRATE ← 16000;  IF SRATE <25 THEN SRATE ← 20000;
    IF SRATE <32 THEN SRATE ← 25600;  IF SRATE <40 THEN SRATE ← 32000;
    IF SRATE <50 THEN SRATE ← 40000; IF SRATE <60 THEN SRATE ← 51200;
    IF SRATE <80 THEN SRATE ← 64000; IF SRATE <100 THEN SRATE ← 80000;
    IF SRATE <120 THEN SRATE ← 102400; IF SRATE <130 THEN SRATE ← 128000;
    IF SRATE <200 THEN SRATE ← 160000; IF SRATE <220 THEN SRATE ← 204800;
    IF SRATE <260 THEN SRATE ← 256000; IF SRATE <4000 THEN SRATE ← 10000;
  	 COMMENT: YOU MAY TYPE 1 OR 12 FOR 12800, ETC. 10000=10000;
		END;  END;

Function SETMAG;
    begin
	VARIABLE X; X←0;
	WHILE X = 0 DO
		BEGIN   X←1; rdnum(nchns); rdnum(srate);
		IF NCHNS > 4  THEN  MAGERR(X);
		IF NCHNS = 3  THEN  MAGERR(X);
		IF NCHNS < 1  THEN  MAGERR(X);
		ADJRATE; 

		COMMENT: ONLY 6400, 12800, ETC. ARE ACCEPTED;
COMMENT:	IF INT(SRATE/6400+.1) } SRATE/6400 THEN MAGERR(X);
		END;

	MAG←512/srate;
	PRINT "NCHNS=",NCHNS,"  SRATE=",SRATE ;
    end;

<SRATE←12800;MAG←512/SRATE;NCHNS←1;
SETMAG; 1 12800;

<FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)

INSTRUMENT SIMP;
OUTA←OUTA+ZOSCIL(P4,MAG*P3,P5);
END;

INSTRUMENT TOOT;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P6);<P6 IS TONE COLOR FOR 'TOOT'
OUTA←OUTA+U2;END;

INSTRUMENT CLAR;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P7);< P7 IS TONE COLOR FOR 'CLAR'
OUTA←OUTA+U2;END;

INSTRUMENT BRIT;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P8);< P8 IS TONE COLOR FOR 'BRIT'
OUTA←OUTA+U2;END;

INSTRUMENT BUZZ;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P9);< P9 IS TONE COLOR FOR 'BUZZ'
OUTA←OUTA+U2;END;

ARRAY F1,F2,F3,F4,F5,F6(512);
SEG(F1);.9 6,1 11 .9 82	.7 90  0 100; < MEZZO LEGATO
SEG(F2);1 3,1 11,.4 31,.1 51,0 100; < STACCATO
SYNTH(F3);1 1  999; < TOOT   - SINE WAVE (USED FOR SIMP ALSO)
SYNTH(F4);1,.5  3,.3  5,.2  7,.1  999; < CLAR
SYNTH(F5);1,.3  2,.4  3,.2  8,.2  12 .1  999; < BRIT
SEG(F6);-1,1   1,7   -1,14   -1,100; < BUZZ


OUTFILE←"MUSIC.MSB";  <SETS UP DEFAULT OUTPUT FILE NAME. (BITS←12;)
NO_MSG←1;  < INHIBITS REPETITIVE MESSAGES


PLAY;TOOT 0 .12 C 1000 F1 F3 F4 F5 F6 0;
CLAR .12;BRIT .24;BUZZ .36;
PLAY;SIMP 0 .5 A 1000 F3;FINISH;